                                Hacker 1.0
                          by WadeSoft, March 1994


Disclaimer

This program has been added to the World's collection of public domain utilites.
It is a free utility, and therefore neglecting the cost of diskette(s), no price is to be
entailed with its distribution. 

Purpose
     
This program was created as a programming aid: to help WadeSoft decipher
various file formats, such as .WAV and .TGA files. It can be used for this purpose
as well as another - to help gamers "cheat". As well as a programmers' best friend,
this utility can be also be the gamers' most valued program.

Program Outline

Hacker was designed with four distinct goals in mind. These four functions, which
are performed on either textual or binary (.exe) files, can be categorized in the
following manner:

     a.   Numeric/character search.
     b.   Numeric/character search and replace.
     c.   Numeric/character modification.
     d.   File comparison.

Numeric/Character Search Explained

This is probably the single most useful part of Hacker's functions in the eyes of a
programmer. It allows the user to search an entire file (textual or binary) for a
given byte, integer, word, long integer or sequence of characters. Upon finding an
occurrence of the specified value, the program will display it's location inside the
file. We used this function to understand the .TGA file format. We knew our image
was 640 pixels wide and 480 long, so we searched for the "word" (see "Data Types
Explained") "640" inside the file. It told us it's exact location. Upon acquiring this
knowledge, our program was able to know the resolution of any image we wanted,
not just this particular one. The point is that we can now take more complete
advantage of the .TGA file format.   

Numeric/Character Search and Replace

When selection what one wants to search for in a file, the program asks if the user
wants to do any replacing after the values have been located. If so, then the
program asks what to replace the values with. Then it begins the search, and when
any identical values are located, the program asks if the user wants the value at this
particular location replaced. If yes is answered, the program replaces the located
value with the desired one. This is useful for cheating in games. If one knew that
he or she had $540 dollars in a game, they could search their save-game file for
540, and if it were found, it could be replaced with $10,000!

Numeric/Character Modification

When searching for a value, let us say $540 in a saved game, the program will
display the location of its findings. Instead of doing a Search/Replace every time
the user wanted to change his or her money in the game (and therefore knowing
exactly how much money he/she had at the time), the user could just specify the
location of the value to change, and change it to $20,000. The gamer would
hopefully have written down the location inside the file where the money was
stored.

File Comparison

Almost always, saved game files are of a constant length. This would indicate that
game-related information (such as money) is always stored in the same location.
File comparison is only useful for which are of the same length. The reason is that
the program reports every byte which is different between the two specified files.
If one were larger than the other, each addition byte would be reported, making for
a huge list of meaningless differences. Let us say that in a role-playing game, we
saved the game just prior to and just after having changed our sword for an axe.
If a file comparison were performed between the two saved-game files, these
changed would be revealed. The user would then know to change byte 45 to value
32 if he wants an axe or value 31 if he wants a sword. What happens when we
change it to 56? A halberd perhaps? After having made a comparison, it is best to
use the "File Modification" tactic to alter these values. Note that it is useful to
create lists of weapons or spells along with their associated byte values and
locations. Include your list and this program together in a package, and distribute
it them!

Data Types Explained (simplified)

A small amount of "programming" knowledge is required if one wants to use this
program. The reason is simple. Because this software functions with ALL types of
files and games, no preset locations or file definitions are known to the utility. In
other words, the user must specify the type of data he is searching for. Data is
stored in several different manners, and below is posted a listing of the different
data types this program supports (which is virtually all of them). If you are
unfamiliar with programming, or more specifically with data storage, here is a brief
explanation. 

A file is composed of a certain number of bytes. Let us take a 64 kilobyte file as
an example. 64k represents 64,000 bytes of information (approximately, since in
computerese kilo stands for 1024, which yields 65,536 bytes). A number between
the range of 0 and 255 (256 possible numbers) requires 1 byte of storage space. If
in your saved game, the value you are searching for cannot exceed 255, then it is
likely to have been stored as a byte value. If your numbers get larger than this (say
money, of which you have $4,000), then it has not been saved as a byte value. It
has probably been saved as something larger, say a word. A word is composed of
two bytes placed side-by-side. These can hold numbers as large as 65,536. If you
think about it this makes sense, since 256 (largest value for a byte-value) multiplied
by 256 gives you 65,536. Though bytes are usually considered to be the smallest
units, they are not. No file can be smaller than 1 byte, but one byte is actually
composed of 8 bits. Here is a description of how the number 341 is stored in
memory. Note that this is larger than 255, so must be stored as a word. 


0    0    0    0    0    0    0    1    0    1    0    1    0    1    0    1
2^15 2^14 2^13 2^12 2^11 2^10 2^9  2^8  2^7  2^6  2^5  2^4  2^3  2^2  2^1  2^0

Please note than "2^15" Indicates 2 to the power of 15. If one wants to change this
base-2 number to base-10, one needs to find the "1's" in the upper row, and for
each of these, add the number represented below it. 341 would be 2^8 + 2^6 + 2^4
+ 2^2 + 2^0 = 341. Notice that there are 16 elements, or in other words, 16 bits.
This means two bytes side-by-side as was described above. This was called a
"word". We said that 65,536 was the largest number which could be represented
by a word. Is this true? Assume a "1" for each of the cells above, and you should
get 65,535. Why are we missing 1? Because "0" is a number, and thus, we can
store 65,536 numbers, of which the largest is 65,535.

 
Data Type      Stored Bytes   Stored Bits    Smallest  Biggest
Byte           1              8              0         255
Character      1              8              ASCII #0  ASCII #255
Word           2              16             0         65,535
Integer        2              16             -32767    32767
Long Integer   4              32             -2.15bil  2.15bil

Using the Program

Throughout this documentation there have been several explanations and examples,
but none formalized. Here we will present to you one formal example of cheating.
Origin's Privateer is quite a popular game now, and so we thought we'd show you
how to "help" you along in the game. Load up a saved game and check to see how
much money you have. Let us say you have $5200 credits exactly. Quit the game
and load up Hacker. It is best to place hacker in your path statement so you can
access it from anywhere, though this is not required. From the main menu, choose
option 4, which is "long int". We know we can have a lot of money, so we assume
the information is stored as a long integer (see table above). The program will then
prompt you for the name of the file. Enter it. They it will ask you if you want to
search the file. Say yes here. If you knew the location of the byte to modify, then
you would say no here. The utility will then ask you what you want to search for.
Enter $5200 here. The program will then as you if you want to replace any of the
values you find. Enter yes if you want to actually change your money. It will then
ask you what your desired value is. Enter 20,000. The program will then begin to
scan the file. If any matches were found, the program will tell you where it found
the occurrence. It will then ask you if you want to replace this value with the
desired quantitiy of cash you entered previously. If yes, then the change will be
made. Hit "y". You have now made some good money without much effort!

Generally, all information related to your character rather than to the map of the
game is stored at the beginning of the file. If a second or third match is made for
$5,200, it is probably fluke. It is generally best to accept only the first occurrence,
and to ignore the following ones. 

Contacting WadeSoft

WadeSoft is at the moment a small shareware-oriented company dedicated to
releasing useful programs to the public domain. In other words, the little utilities
we write to help us write our larger programs are released as public, whereas we
ask for some money for the larger ones!

WadeSoft runs a public/private bulletin board called The Spinning Disk at the
following number: 416-447-9233 (416-447-WADE). If private access is desired
(access to files and the other telephone lines) then the nominal fee of $15.00 is
asked. You do not need to register ($15.00) with the Spinning Disk to obtain
WadeSoft technical help. To do so, please leave a comment to the System Operator
detailing your problem(s). That is option "C" at the main menu. 

Registration

Registration of any WadeSoft product is mearly $10.00 US or $12.50 Canadian.
Registration simply means that you receive a diskette in the mail, along with nicely
printed and formatted documentation. Please indicate your mailing address,
telephone number and diskette type in the envelope. By sending $25.00 ($30.00
CND), you will receive a copy of ALL our programs, along with their respective
documentations. In order to minimize our costs however, all programs will be
contained on one or two diskettes, rather than having a each program contained
individually.

Mailing Address

Please mail cheques to the following address, and make cheques payable to
"Gregory Wade".

Gregory Wade
26 Farrington Drive
North York, On, Canada
M2L 2B6
